(function() {

  function init() {

    // 验证名称
    function checkName(obj) {
      var val = obj.value;
      var flag = false;
      if (!val) {
        setMsg(obj, '姓名不能为空', 'red');
      } else {
        //获取单字节字符
        var sing = val.match(/[\u0000-\u00ff]/g);
        // 获取双字节字符
        var doub = val.match(/[\u0100-\uffff]/g);

        // 单字节 +２×双字节
        var len = (sing ? sing.length : 0) + (doub ? doub.length * 2 : 0);
        // console.log(sing,doub,len);

        // 最后验证长度
        if (len >= 4 && len <= 16) {
          setMsg(obj, '姓名格式正确', 'green');
          flag = true;
        } else {
          setMsg(obj, '姓名格式不正确', 'red');
        }
      }
      console.log(flag);

      return flag;
    }

    // 验证密码
    function checkPassw(obj) {
      var val = obj.value;
      var flag = false;
      if (!val) {
        setMsg(obj, '密码不能为空', 'red');
      } else {
        //
        var reg = /^[0-9a-zA-Z]{4,}$/g;
        var sing = reg.test(val);
        console.log(sing);

        //
        if (sing) {
          setMsg(obj, '密码可用', 'green');
          flag = true;
        } else {
          setMsg(obj, '密码不可用', 'red');
        }
      }

      return flag;
    }

    // 密码确认
    function checkPasswr(obj) {
      var val = obj.value;
      var flag = false;
      if (!val) {
        setMsg(obj, '密码输入不一致', 'red');
      } else {
        var passw = document.getElementById('passw').value;

        // 最后验证长度
        if (val === passw) {
          setMsg(obj, '密码输入一致', 'green');
          flag = true;
        } else {
          setMsg(obj, '密码输入不一致', 'red');
        }
      }
      console.log(flag);

      return flag;
    }

    // 邮箱
    function checkMail(obj) {
      var val = obj.value;
      var flag = false;
      if (!val) {
        setMsg(obj, '邮箱不能为空', 'red');
      } else {
        var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/;
        var sing = reg.test(val);
        console.log(sing);

        // 最后验证长度
        if (sing) {
          setMsg(obj, '邮箱格式正确', 'green');
          flag = true;
        } else {
          setMsg(obj, '邮箱格式不正确', 'red');
        }
      }

      return flag;
    }

    // 手机
    function checkPhone(obj) {
      var val = obj.value;
      var flag = false;
      if (!val) {
        setMsg(obj, '手机不能为空', 'red');
      } else {
        /*
        * 手机号码:
         * 13[0-9], 14[5,7], 15[0, 1, 2, 3, 5, 6, 7, 8, 9], 17[6, 7, 8], 18[0-9], 170[0-9]
         * 移动号段: 134,135,136,137,138,139,150,151,152,157,158,159,182,183,184,187,188,147,178,1705
         * 联通号段: 130,131,132,155,156,185,186,145,176,1709
         * 电信号段: 133,153,180,181,189,177,1700

        * 文／ ROB_YONG（ 简书作者）
        * 原文链接： http: //www.jianshu.com/p/e8477fdccbe9
        * 著作
        * 权归作者所有，转载请联系作者获得授权，并标注“简书作者”。
         */
        var reg = /^1(3[0-9]|4[57]|5[0-35-9]|8[0-9]|7[0678])\d{8}$/;
        var sing = reg.test(val);
        console.log(sing);

        // 最后验证长度
        if (sing) {
          setMsg(obj, '手机格式正确', 'green');
          flag = true;
        } else {
          setMsg(obj, '手机格式不正确', 'red');
        }
      }

      return flag;
    }

    function ckec(obj) {
      var id = obj.id;
      var flag ;
      switch (id) {
        case 'name':
          flag = checkName(obj);
          break;
        case 'passw':
          flag = checkPassw(obj);
          break;
        case 'passwr':
          flag = checkPasswr(obj);
          break;
        case 'mail':
          flag = checkMail(obj);
          break;
        case 'phone':
          flag = checkPhone(obj);
          break;
        default:
          console.error('无此选项');
          flag = false;
      }
      return flag;
    }

    function getNext(obj) {
      var temp = obj.parentNode.nextSibling;
      if (temp.style) {
        return temp;
      } else {
        return temp.nextSibling;
      }
    }

    function showMsg(obj) {
      var temp = getNext(obj);
      temp.style.display = 'block';
    }
    // 设置 文本框 和 信息
    function setMsg(obj, str, colr) {
      var msg = getNext(obj);
      msg.innerHTML = str;
      msg.style.color = colr;
      obj.style.borderColor = colr;
    }

    var form = document.getElementById('box');
    var butn = document.getElementById('yanz');
    var inputs = form.getElementsByTagName('input');
    var len = inputs.length;
    for (let i = 0; i < len; i++) {
      var item = inputs[i];
      item.onfocus = function() {
        showMsg(this);
      };

      item.onblur = function() {
        ckec(this);
      };
    }

    butn.onclick = function() {
      var inputFlag = true;
      for (let i = 0; i < len; i++) {
        var temp = ckec(inputs[i]);
        if (!temp && inputFlag) {
          inputFlag = false;
        }
      }
      if (inputFlag) {
        alert('提交成功');
      } else {
        alert('提交失败');
      }
    };
  }

  // 页面加载完时 进行初始化
  window.onload = init;
})();
